跳到主要内容

15.PS/2数据包解析器

PS/2鼠标协议发送的消息长度为三个字节。然而,在连续的字节流中,消息的起始和结束位置并不明显。唯一的指示是每个三字节消息的第一个字节的第3位总是为1(但其他两个字节的第3位可能根据数据为1或0)。

我们希望设计一个有限状态机,当接收到输入字节流时,能够搜索消息边界。我们将使用的算法是丢弃字节,直到看到一个第3位为1的字节。然后我们假设这是消息的第1个字节,并在成功接收全部3个字节后发出消息接收完成的信号(标记为done)。

有限状态机应在每个消息的第三个字节被成功接收后的那个周期立即发出done信号。

以下是一些时序图来解释期望的行为:

alt text

模块声明

module top_module(
input clk,
input [7:0] in,
input reset, // Synchronous reset
output done);

做题区